class Hero(object):
    """定义了一个英雄类，可以移动和攻击"""
    # Python 的类里提供的，两个下划线开始，两个下划线结束的方法，就是魔法方法，__init__()就是一个魔法方法，通常用来做属性初始化 或 赋值 操作。
    # 如果类面没有写__init__方法，Python会自动创建，但是不执行任何操作，
    # 如果为了能够在完成自己想要的功能，可以自己定义__init__方法，
    # 所以一个类里无论自己是否编写__init__方法 一定有__init__方法。

    def __init__(self, name, hp, atk, armor):
        """ 方法，用来做变量初始化 或 赋值 操作，在类实例化对象的时候，会被自动调用"""
        print("执行__init__方法！")
        # self.name = "泰达米尔" # 姓名
        self.name = name
        # self.hp = 2600 # 生命值
        self.hp = hp
        # self.atk = 450  # 攻击力
        self.atk = atk
        # self.armor = 200  # 护甲值
        self.armor = armor

    def move(self):
        """实例方法"""
        print("正在前往事发地点...")

    def attack(self):
        """实例方法"""
        print("发出了一招强力的普通攻击...")

    def info(self):
        """
        打印英雄属性
        :return:
        """
        print("当前英雄是：{}，血量是{}，攻击力是{}，防御是{}".format(self.name, self.hp, self.atk, self.armor))

    def __del__(self):
        print("执行del方法，清除英雄{}的内存空间".format(self.name))

# # init方法，在实例化创建对象时会自动执行
# gailun = Hero('盖伦', 3000, 200, 220)
# kate = Hero('卡特', 2500, 210, 180)
# # print(gailun.name)
# # print(kate.name)
# gailun.info()
# kate.info()
# print(id(gailun.name))
# print(id(kate.name))
# del kate
# # del gailun
# print("这是一条分割线----------------------------------")

# # 当有变量保存了一个对象的引用时，此对象的引用计数就会加1
# gailun1 = Hero('盖伦', 3000, 200, 220)
# gailun2 = gailun1
# gailun3 = gailun2
# del gailun3
# del gailun1
# del gailun2
# print("这是一条分割线----------------------------------")


# 1
# 执行del方法，清除英雄{}的内存空间
# 这是一条分割线----------------------------------



# 2
# 这是一条分割线----------------------------------
# 执行del方法，清除英雄{}的内存空间